﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Runtime.InteropServices;

namespace Dashboard.Models
{
    //Описание буфера, куда будет записываться вся информация о памяти на данный момент
    [StructLayoutAttribute(LayoutKind.Sequential)]
    public struct MEMORYSTATUSEX
    {
        public uint dwLength;

        public uint dwMemoryLoad;

        public ulong ullTotalPhys;

        public ulong ullAvailPhys;

        public ulong ullTotalPageFile;

        public ulong ullAvailPageFile;

        public ulong ullTotalVirtual;

        public ulong ullAvailVirtual;

        public ulong ullAvailExtendedVirtual;
    }
    //добавление в библиотеку NativeMethods поле GlobalMemoryStatusEx из библиотеки kernel32,
    //при использовании которого производится запись текущих показателей в буфер
    public partial class NativeMethods
    {
        [DllImportAttribute("kernel32.dll", EntryPoint = "GlobalMemoryStatusEx")]
        [return: MarshalAsAttribute(UnmanagedType.Bool)]
        public static extern bool GlobalMemoryStatusEx([OutAttribute()] out MEMORYSTATUSEX lpBuffer);

    }

    public class ReadDataRAM : IReaderData
    {
        private MEMORYSTATUSEX MemoryStatus;

        public ReadDataRAM()
        {
            this.MemoryStatus = new MEMORYSTATUSEX();
            MemoryStatus.dwLength = 64;
        }

        public byte GetData()
        {
            NativeMethods.GlobalMemoryStatusEx(out MemoryStatus);
            return (byte)MemoryStatus.dwMemoryLoad;
        }
    }
}